package com.nit.tools;

import lombok.SneakyThrows;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import javax.imageio.ImageIO;
import java.io.File;

/**
 * 图片处理工具
 */
public class ThumbnailsUtls {

    static String in = "Z:\\nit-random-tools\\src\\main\\resources\\in\\";

    static String out = "Z:\\nit-random-tools\\src\\main\\resources\\out\\";

    static String testImage = in + "/1.jpg";


    public static void main(String[] args) throws Exception {

        /*
         * size(width,height) 若图片横比200小，高比300小，不变
         * 若图片横比200小，高比300大，高缩小到300，图片比例不变 若图片横比200大，高比300小，横缩小到200，图片比例不变
         * 若图片横比200大，高比300大，图片按比例缩小，横为200或高为300
         */

//        1：指定大小进行缩放
        Thumbnails.of(testImage).size(200, 300).toFile(out + "image_200x300.jpg");
        Thumbnails.of(testImage).size(2560, 2048).toFile(out + "image_2560x2048.jpg");

//        2：按照比例进行缩放
        /**
         * 按照比例进行缩放
         * scale 图片的压缩比例 值在0-1之间，1f就是原图，0.5就是原图的一半大小
         * outputQuality 图片压缩的质量 值在0-1 之间，越接近1质量越好，越接近0 质量越差
         * @throws IOException
         */
        /**
         * scale(比例)
         */
        Thumbnails.of(testImage).scale(0.25f).outputQuality(0.8f).toFile(out + "image_25%.jpg");
        Thumbnails.of(testImage).scale(0.75f).outputQuality(0.8f).toFile(out + "image_110%.jpg");
    }

    /**
     * 3：不按照比例，指定大小进行缩放
     */
    @SneakyThrows
    private void test3() {
        /**
         * keepAspectRatio(false) 默认是按照比例缩放的
         */
        Thumbnails.of(testImage).size(120, 120).keepAspectRatio(false).toFile(out + "image_120x120.jpg");
    }

    /**
     * 旋转
     */
    @SneakyThrows
    private void test4() {
        /**
         * rotate(角度),正数：顺时针 负数：逆时针
         */
        Thumbnails.of("images/test.jpg").size(1280, 1024).rotate(90).toFile("C:/image+90.jpg");
        Thumbnails.of("images/test.jpg").size(1280, 1024).rotate(-90).toFile("C:/iamge-90.jpg");
    }

    /**
     * 水印
     */
    @SneakyThrows
    private void test5() {
        /**
         * watermark(位置，水印图，透明度)
         */
        Thumbnails.of("images/test.jpg").size(1280, 1024).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f)
                .outputQuality(0.8f).toFile("C:/image_watermark_bottom_right.jpg");
        Thumbnails.of("images/test.jpg").size(1280, 1024).watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f)
                .outputQuality(0.8f).toFile("C:/image_watermark_center.jpg");
    }


    /**
     * 裁剪
     */
    @SneakyThrows
    private void test6() {
        /**
         * 图片中心400*400的区域
         */
        Thumbnails.of("images/test.jpg").sourceRegion(Positions.CENTER, 400, 400).size(200, 200).keepAspectRatio(false)
                .toFile("C:/image_region_center.jpg");
        /**
         * 图片右下400*400的区域
         */
        Thumbnails.of("images/test.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400, 400).size(200, 200).keepAspectRatio(false)
                .toFile("C:/image_region_bootom_right.jpg");
        /**
         * 指定坐标
         */
        Thumbnails.of("images/test.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_coord.jpg");

    }

    /**
     * 转化图片格式
     */
    @SneakyThrows
    private void test7() {
        /**
         * outputFormat(图像格式)
         */
        Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("png").toFile("C:/image_1280x1024.png");
        Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("gif").toFile("C:/image_1280x1024.gif");
    }


}


